package com.ruoyi.delivery.service;

import com.ruoyi.delivery.domain.DelAllocationDetail;
import com.ruoyi.delivery.domain.DelAllocationOrder;
import java.util.List;

/**
 * 调拨单 服务层
 *
 * @author hu
 */
public interface IDelAllocationOrderService {

    /**
     * 根据条件筛选调拨单（支持分页）
     * @param allocationNo 调拨单号（支持模糊搜索）
     * @param origin 发货地（支持模糊搜索）
     * @param destination 目的地（支持模糊搜索）
     * @param departStartDate 调拨日期范围的起始日期
     * @param departEndDate 调拨日期范围的结束日期
     * @param arriveStartDate 预计到达日期范围的起始日期
     * @param arriveEndDate 预计到达日期范围的结束日期
     * @param state 调拨单状态
     * @param orderNo 订单号（支持模糊搜索）
     * @param page 当前页码（从 1 开始）
     * @param pageSize 每页记录数
     * @return 满足条件的调拨单列表
     */
    List<DelAllocationOrder> filterAllocationOrders(
            String allocationNo,
            String origin,
            String destination,
            String departStartDate,
            String departEndDate,
            String arriveStartDate,
            String arriveEndDate,
            String state,
            String orderNo,
            int page,
            int pageSize
    );
    int countOperatorTransportOrders();
    String generateTrackingNumber();

    /**
     * 插入调拨单
     * @param order 调拨单对象
     * @return 是否插入成功
     */
    boolean insertAllocationOrder(DelAllocationOrder order);

    /**
     * 删除调拨单
     * @param allocationNo 调拨单号
     * @return 是否删除成功
     */
    boolean deleteAllocationOrder(String allocationNo);

    /**
     * 修改调拨单
     * @param order 调拨单对象
     * @return 是否修改成功
     */
    boolean updateAllocationOrder(DelAllocationOrder order);

    /**
     * 根据 allocationNo 获取所有调拨单明细
     * @param allocationNo 运单号
     * @return 调拨单明细列表
     */
    List<DelAllocationDetail> getDetailsByAllocationNo(String allocationNo);
}
